package com.qn.controller;

import com.qn.auth.SessionManager;
import com.qn.dto.LoginUserDTO;
import com.qn.dto.UserTokenDTO;
import com.qn.login.LoginAbstract;
import com.qn.login.LoginFactory;
import com.qn.util.JWTUtils;
import com.qn.util.ServletUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class LoginController {

    @GetMapping("test")
    public String test() {
        return (String) SessionManager.getLoginId();
    }

    @PostMapping("login")
    public String login(LoginUserDTO loginUserDTO) {
        // 1.判断用户名密码是否正确
        // TODO: 查库操作

        // 2.用户名密码正确生成 token
        UserTokenDTO userTokenDTO = new UserTokenDTO();
        userTokenDTO.setUid("1");
        userTokenDTO.setPhone("123456");
        userTokenDTO.setIp(ServletUtils.getClientIP());
        String token = JWTUtils.generateToken(userTokenDTO);

        // 3.存入 token 至 redis
//        tokenDao.setObject(userTokenDTO.getUid(), token, TokenDao.DEFAULT_EXPIRE);
        SessionManager.login(userTokenDTO);
        return token;
    }

    @PostMapping("login/v2")
    public String loginFactory(LoginUserDTO loginUserDTO) {
        LoginAbstract loginInstance = LoginFactory.getLoginInstance(loginUserDTO.getLoginType());
        return loginInstance.login(loginUserDTO);
    }

    @PostMapping("loginOut")
    public String loginOut() {
        SessionManager.logout();
        return "ok";
    }
}
